'use strict'
Object.defineProperty(exports, '__esModule', { value: true })
var utils_1 = require('../common/utils')
var component_1 = require('../common/component')
var button_1 = require('../mixins/button')
var open_type_1 = require('../mixins/open-type')
var FIT_MODE_MAP = {
  none: 'center',
  fill: 'scaleToFill',
  cover: 'aspectFill',
  contain: 'aspectFit',
  widthFix: 'widthFix',
  heightFix: 'heightFix'
}
component_1.VantComponent({
  mixins: [button_1.button, open_type_1.openType],
  classes: ['custom-class', 'loading-class', 'error-class', 'image-class'],
  props: {
    src: {
      type: String,
      observer: function() {
        this.setData({
          error: false,
          loading: true
        })
      }
    },
    round: Boolean,
    width: {
      type: null,
      observer: 'setStyle'
    },
    height: {
      type: null,
      observer: 'setStyle'
    },
    radius: null,
    lazyLoad: Boolean,
    useErrorSlot: Boolean,
    useLoadingSlot: Boolean,
    showMenuByLongpress: Boolean,
    fit: {
      type: String,
      value: 'fill',
      observer: 'setMode'
    },
    showError: {
      type: Boolean,
      value: true
    },
    showLoading: {
      type: Boolean,
      value: true
    }
  },
  data: {
    error: false,
    loading: true,
    viewStyle: ''
  },
  mounted: function() {
    this.setMode()
    this.setStyle()
  },
  methods: {
    setMode: function() {
      this.setData({
        mode: FIT_MODE_MAP[this.data.fit]
      })
    },
    setStyle: function() {
      var _a = this.data
      var width = _a.width
      var height = _a.height
      var radius = _a.radius
      var style = ''
      if (utils_1.isDef(width)) {
        style += 'width: ' + utils_1.addUnit(width) + ';'
      }
      if (utils_1.isDef(height)) {
        style += 'height: ' + utils_1.addUnit(height) + ';'
      }
      if (utils_1.isDef(radius)) {
        style += 'overflow: hidden;'
        style += 'border-radius: ' + utils_1.addUnit(radius) + ';'
      }
      this.setData({ viewStyle: style })
    },
    onLoad: function(event) {
      this.setData({
        loading: false
      })
      this.$emit('load', event.detail)
    },
    onError: function(event) {
      this.setData({
        loading: false,
        error: true
      })
      this.$emit('error', event.detail)
    },
    onClick: function(event) {
      this.$emit('click', event.detail)
    }
  }
})
